const fs = require('fs')
const path = require('path')
const esm = require('esm')
const requireModule = esm(module)

const FRONT_MACAU_DIR = path.join(__dirname, '../src/data/macau')
const FRONT_HK_DIR = path.join(__dirname, '../src/data/hongkong')

// const groupTypes = ['two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'ten', 'twelve', 'sixteen', 'twentyfour']
const groupTypes = ['sixteen']

/**
 * 读取指定目录下的所有 .js 文件，并合并 .default 数据，同时按照年份升序排序
 * @param {string} dirPath - 目标目录
 * @returns {Array} 按年份升序排序的数据数组
 */
const readJsFiles = (dirPath) => {
  if (!fs.existsSync(dirPath)) {
    console.warn(`Warning: Directory ${dirPath} does not exist.`)
    return []
  }

  // 读取该目录下所有的 .js 文件，并按文件名的年份排序
  const jsFiles = fs
    .readdirSync(dirPath)
    .filter((file) => file.endsWith('.js'))
    .sort((a, b) => {
      // 提取文件名中的年份部分并转换为数值
      const yearA = parseInt(a.match(/\d+/)?.[0] || '0', 10)
      const yearB = parseInt(b.match(/\d+/)?.[0] || '0', 10)
      return yearA - yearB // 按照年份升序排序
    })

  // 遍历文件，导入并提取 .default 数据
  const data = jsFiles.reduce((acc, file) => {
    const filePath = path.join(dirPath, file)
    try {
      const moduleData = requireModule(filePath) // 动态导入 JavaScript 模块
      if (moduleData && moduleData.default) {
        acc.push(...moduleData.default) // 提取 .default 数据，并合并到数组中
      }
    } catch (err) {
      console.error(`Error loading module ${file}:`, err)
    }
    return acc
  }, [])

  return data
}

/**
 * 根据 region 读取对应目录下的 .js 数据
 * @returns {Array} 读取的 .default 数据数组（按年份升序排序）
 */
const readAllValues = ($region) => {
  const { region } = requireModule(path.join(__dirname, '../src/utils/modules/settings.js'))

  const _region = $region || region

  // console.log(`Region: ${region}`)

  const targetDir = _region === 'm' ? FRONT_MACAU_DIR : FRONT_HK_DIR
  return readJsFiles(targetDir)
}

const allValues = readAllValues()

module.exports = { allValues, readAllValues }
